// package com.qqt.csr.web.controller;
//
// import cn.hutool.core.io.FileUtil;
// import com.qqt.csr.common.enums.FileGroupEnum;
// import com.qqt.csr.common.enums.FileTypeEnum;
// import com.qqt.csr.common.exception.BizException;
// import com.qqt.csr.common.exception.StatusCode;
// import com.qqt.csr.common.idempotent.Idempotent;
// import com.qqt.csr.common.interceptor.auth.Authorize;
// import com.qqt.csr.common.log.Log;
// import com.qqt.csr.common.utils.ServiceAssert;
// import com.qqt.csr.common.vo.resp.ObjectResponse;
// import com.qqt.csr.web.dto.file.FileDTO;
// import com.qqt.csr.web.entity.FileMetaData;
// import com.qqt.csr.web.service.IFileService;
// import com.qqt.csr.web.vo.req.DeletingFileReqVO;
// import com.qqt.csr.web.vo.resp.FileUploadInfoRespVO;
// import io.swagger.v3.oas.annotations.Operation;
// import lombok.extern.slf4j.Slf4j;
// import org.apache.commons.lang3.StringUtils;
// import org.springframework.beans.factory.annotation.Autowired;
// import org.springframework.beans.factory.annotation.Value;
// import org.springframework.core.io.InputStreamResource;
// import org.springframework.http.*;
// import org.springframework.validation.annotation.Validated;
// import org.springframework.web.bind.annotation.*;
// import org.springframework.web.multipart.MultipartFile;
//
// import java.io.IOException;
// import java.util.concurrent.TimeUnit;
//
// @Slf4j
// // @RestController
// // @RequestMapping("file")
// // @Tag(name = "文件上传", description = "文件上传")
// @Deprecated
// public class FileUploadController {
//     @Value("${file.upload.bucketName}")
//     private String bucketName;
//
//     @Value("${file.upload.img.maxSize}")
//     private Long uploadImgMaxSize;
//     @Value("${file.upload.doc.maxSize}")
//     private Long uploadDocMaxSize;
//
//     @Autowired
//     private IFileService fileService;
//
//     /**
//      * 文件上传
//      *
//      * @param file
//      * @return
//      */
//     @Authorize
//     @Operation(summary = "上传文件")
//     @PostMapping("/upload")
//     public ObjectResponse<FileUploadInfoRespVO> fileUpload(@RequestParam("file") MultipartFile file) throws IOException {
//         ServiceAssert.isTrue(StringUtils.isNotBlank(file.getOriginalFilename()), StatusCode.Common.NULL_ERROR.getCode(), "文件名不能未空");
//         String extension = FileUtil.getSuffix(file.getOriginalFilename());
//         ServiceAssert.isTrue(StringUtils.isNotBlank(extension), StatusCode.Common.NULL_ERROR.getCode(), "不支持当前文件类型");
//
//         FileTypeEnum fileType = FileTypeEnum.of(extension);
//         ServiceAssert.notNull(fileType, StatusCode.Common.ILLEGAL.getCode(), "不支持当前文件类型");
//
//         long fileSize = file.getSize();
//         if (FileGroupEnum.IMG.equals(fileType.getGroup())) {
//             ServiceAssert.isTrue(fileSize <= uploadImgMaxSize, StatusCode.Common.ILLEGAL.getCode(), "图片大小不能超过50M");
//         } else if (FileGroupEnum.DOC.equals(fileType.getGroup())) {
//             ServiceAssert.isTrue(fileSize <= uploadDocMaxSize, StatusCode.Common.ILLEGAL.getCode(), "文件大小不能超过100M");
//         } else {
//             throw new BizException(StatusCode.Common.ILLEGAL.getCode(), "不支持当前文件类型");
//         }
//
//         FileMetaData fileMetaData = fileService.uploadFile(file, fileType, bucketName);
//         return ObjectResponse.success(FileUploadInfoRespVO.builder()
//                 .url(fileMetaData.getUrl())
//                 .fileId(fileMetaData.getFileId())
//                 .contentType(fileMetaData.getContentType())
//                 .build());
//     }
//
//     @Operation(summary = "获取文件")
//     @GetMapping("/query/{fileId}")
//     public ResponseEntity<InputStreamResource> queryFile(@PathVariable("fileId") String fileId) throws IOException {
//         ServiceAssert.isTrue(StringUtils.isNotBlank(fileId), StatusCode.Common.NULL_ERROR.getCode(), "文件id不能为空");
//         //读取文件
//         FileDTO fileDto = fileService.getFileById(fileId, bucketName);
//
//         return ResponseEntity
//                 .ok()
//                 .header("Content-Disposition", String.format("attachment; filename=\"%s\"", fileDto.getFileMetadata().getFileName()))
//                 .cacheControl(CacheControl.maxAge(1, TimeUnit.DAYS).mustRevalidate())
//                 .contentLength(fileDto.getFileMetadata().getFileSize())
//                 .contentType(MediaType.parseMediaType(fileDto.getFileMetadata().getContentType()))
//                 .body(new InputStreamResource(fileDto.getInputStream()));
//     }
//
//     @Authorize
//     @Log(desc = "删除文件")
//     @Operation(summary = "删除文件")
//     @PostMapping("/delete")
//     @Idempotent(model = "file:delete")
//     public ObjectResponse<String> deleteFile(@Validated @RequestBody DeletingFileReqVO req) {
//         ServiceAssert.notNull(req, StatusCode.Common.NULL_ERROR.getCode(), "请求参数不能为空");
//         fileService.deleteFile(req.getFileId(), bucketName);
//         return ObjectResponse.success();
//     }
//
// }
